<?php
/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 * for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */

/**
 * transforme un tableau associatif en xml
 * @return string 
 */
function arrayToXml($array){
    $xml = new SimpleXMLElement();
    array_walk_recursive($array, array ($xml, 'addChild'));
    return $xml->asXML();
}

/**
 * donne la description d'un code http
 * @param string $code
 * @return string
 */
function getHttpCodeDescription($code, $fr=false){
    $code = (string) $code;
    $codes = array(
        "100"=>array("Continue","Attente de la suite de la requête"),
        "101"=>array("Switching Protocols","Acceptation du changement de protocole"),
        "102"=>array("Processing","WebDAV : Traitement en cours (évite que le client dépasse le temps d'attente limite)."),
        "200"=>array("OK","Requête traitée avec succès"),
        "201"=>array("Created","Requête traitée avec succès avec création d'un document"),
        "202"=>array("Accepted","Requête traitée mais sans garantie de résultat"),
        "203"=>array("Non-Authoritative Information","Information retournée mais générée par une source non certifiée"),
        "204"=>array("No Content","Requête traitée avec succès mais pas d'information à renvoyer"),
        "205"=>array("Reset Content","Requête traitée avec succès, la page courante peut être effacée"),
        "206"=>array("Partial Content","Une partie seulement de la requête a été transmise"),
        "207"=>array("Multi-Status","WebDAV : Réponse multiple."),
        "210"=>array("Content Different","WebDAV : La copie de la ressource coté client diffère de celle du serveur (contenu ou propriétés)."),
        "300"=>array("Multiple Choices","L'URI demandée se rapporte à plusieurs ressources"),
        "301"=>array("Moved Permanently","Document déplacé de façon permanente"),
        "302"=>array("Moved Temporarily","Document déplacé de façon temporaire"),
        "303"=>array("See Other","La réponse à cette requête est ailleurs"),
        "304"=>array("Not Modified","Document non-modifié depuis la dernière requête"),
        "305"=>array("Use Proxy","La requête doit être ré-adressée au proxy"),
        "307"=>array("Temporary Redirect","La requête doit être redirigée temporairement vers l'URI spécifiée"),
        "400"=>array("Bad Request","La syntaxe de la requête est erronée"),
        "401"=>array("Unauthorized","Accès à la ressource refusé"),
        "402"=>array("Payment Required","Paiement requis pour accéder à la ressource (non utilisé)"),
        "403"=>array("Forbidden","Refus de traitement de la requête"),
        "404"=>array("Not Found","Document non trouvé"),
        "405"=>array("Method Not Allowed","Méthode de requête non autorisée"),
        "406"=>array("Not Acceptable","Toutes les réponses possibles seront refusées."),
        "407"=>array("Proxy Authentication Required","Accès à la ressource autorisé par identification avec le proxy"),
        "408"=>array("Request Time-out","Temps d'attente d'une réponse du serveur écoulé"),
        "409"=>array("Conflict","La requête ne peut être traitée à l'état actuel"),
        "410"=>array("Gone","La ressource est indisponible et aucune adresse de redirection n'est connue"),
        "411"=>array("Length Required","La longueur de la requête n'a pas été précisée"),
        "412"=>array("Precondition Failed","Préconditions envoyées par la requête non-vérifiées"),
        "413"=>array("Request Entity Too Large","Traitement abandonné dû à une requête trop importante"),
        "414"=>array("Request-URI Too Long","URI trop longue"),
        "415"=>array("Unsupported Media Type","Format de requête non-supportée pour une méthode et une ressource données"),
        "416"=>array("Requested range unsatifiable","Champs d'en-tête de requête 'range' incorrect."),
        "417"=>array("Expectation failed","Comportement attendu et défini dans l'en-tête de la requête insatisfaisable"),
        "422"=>array("Unprocessable entity","WebDAV : L'entité fourni avec la requête est incompréhensible ou incomplet."),
        "423"=>array("Locked","WebDAV : L'opération ne peut avoir lieu car la ressource est verrouillée."),
        "424"=>array("Method failure,WebDAV : Une méthode de la transaction a échoué."),
        "500"=>array("Internal Server Error","Erreur interne du serveur"),
        "501"=>array("Not Implemented","Fonctionnalité réclamée non supportée par le serveur"),
        "502"=>array("Bad Gateway","Mauvaise réponse envoyée à un serveur intermédiaire par un autre serveur."),
        "503"=>array("Service Unavailable","Service indisponible"),
        "504"=>array("Gateway Time-out","Temps d'attente d'une réponse d'un serveur à un serveur intermédiaire écoulé"),
        "505"=>array("HTTP Version not supported","Version HTTP non gérée par le serveur"),
        "507"=>array("Insufficient storage","WebDAV : Espace insuffisant pour modifier les propriétés ou construire la collection"),
        "509"=>array("Bandwidth Limit Exceeded","Code non officiel utilisé par de nombreux serveurs pour indiquer un dépassement de quota.")
    );
    
    if(array_key_exists($code, $codes))
        return $fr? $codes[$code][1]:$codes[$code][0];
    
    return NULL;
}
